﻿//==========================================================
//Đã sửa bởi tranninh_86_yb@yahoo.com ngày 24/06/2013
//==========================================================

using System;
using System.Data;
using System.Data.SqlClient;

using prjKQXS_DLL.Dal;
using System.Windows.Forms;
using prjKQXS_DLL;
using DevExpress.XtraEditors;

namespace prjKQXS_UI.View
{
    public partial class frmTLDaiLy : DevExpress.XtraEditors.XtraForm
    {
       int capDL;

       #region form ============================================================================
       public frmTLDaiLy(int cap)
        {
            InitializeComponent();
            capDL = cap;
            if (cap == 2)
            {
                gcolMaCB.Caption = "Mã đại lý";
                gcolMaCB.FieldName = "MaDL";

                gColTenCB.Caption = "Tên đại lý";
                gColTenCB.FieldName = "TenDL";
            }
        }

        private void frmTLDaiLy_Load(object sender, EventArgs e)
        {
            lblTitle.Text += capDL.ToString();
        }

        private void frmTLDaiLy_Shown(object sender, EventArgs e)
        {
            deTungay.DateTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month,1);
            gvDonVi.Focus();
        }
        #endregion form =========================================================================

        //if (rgMode.SelectedIndex == 1 && gvDonVi.RowCount > 0)
                    //{
                    //    int LoaiKyHan = 0;
                    //    if (rb3Thang.Checked) LoaiKyHan = 3;
                    //    else if (rb6Thang.Checked) LoaiKyHan = 6;
                    //    else if (rb12Thang.Checked) LoaiKyHan = 12;
        
                    //    gvDonVi.SetRowCellValue(gvDonVi.FocusedRowHandle, gcolLoaiKyHan, LoaiKyHan);
                    //}
        
        #region gcDonVi
        private void gcDonVi_Click(object sender, EventArgs e)
        {
            lblCount.Text = "Dòng hiện tại: " + (gvDonVi.FocusedRowHandle + 1).ToString() + "/" + gvDonVi.RowCount.ToString();

            if (rgMode.SelectedIndex == 1 && gvDonVi.RowCount>0)
            {
                int loaikyhan = Convert.ToInt32(gvDonVi.GetRowCellValue(gvDonVi.FocusedRowHandle, gcolLoaiKyHan));
                if (loaikyhan == 3) rb3Thang.Checked = true;
                else if (loaikyhan == 6) rb6Thang.Checked = true;
                else if (loaikyhan == 12) rb12Thang.Checked = true;
            }
        }

        private void gcDonVi_DataSourceChanged(object sender, EventArgs e)
        {
            lblCount.Text = "Số lượng: " + gvDonVi.RowCount.ToString();

            if (rgMode.SelectedIndex == 0)
            {
                if (gvDonVi.RowCount > 0)
                {
                    grbLoaiKyHan.Enabled = true;
                    grcThietLapLai.Enabled = true;
                }
                else
                {
                    grbLoaiKyHan.Enabled = false;
                    grcThietLapLai.Enabled = false;
                }
            }
            else
            {
                if (gvDonVi.RowCount > 0)
                {
                    grbLoaiKyHan.Enabled = true;
                    grcThietLapLai.Enabled = true;

                    if (rgMode.SelectedIndex == 1 && gvDonVi.RowCount > 0)
                    {
                        int loaikyhan = Convert.ToInt32(gvDonVi.GetRowCellValue(gvDonVi.FocusedRowHandle, gcolLoaiKyHan));
                        if (loaikyhan == 3) rb3Thang.Checked = true;
                        else if (loaikyhan == 6) rb6Thang.Checked = true;
                        else if (loaikyhan == 12) rb12Thang.Checked = true;
                    }
                }
            }
        }

        private void gvDonVi_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
        {
            if (e.Column.Name == "gcolLaiXuat")
            {
                clsThietLapLai tll = new clsThietLapLai();
                tll.OnAction += new clsThietLapLai.OnActionHandler(tll_OnAction);
                tll.OnError += new clsThietLapLai.OnErrorHandler(tll_OnError);

                int id;
                if (capDL == 1) id = (int)gvDonVi.GetRowCellValue(e.RowHandle, "DMCanBoID");
                else id = (int)gvDonVi.GetRowCellValue(e.RowHandle, "HopDongID");

                int loaikyhan = 0;
                if (rb3Thang.Checked) loaikyhan = 3;
                else if (rb6Thang.Checked) loaikyhan = 6;
                else if (rb12Thang.Checked) loaikyhan = 12;

                decimal laixuat = (decimal)e.Value;
                tll.Update(capDL, id, deTungay.DateTime.Date, loaikyhan, laixuat);
            }
        }
        #endregion


        #region OTHERS CONTROL EVENT
        private void rgMode_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (rgMode.SelectedIndex == 0)
            {
                grbLoaiKyHan.Enabled = true;
                grcThietLapLai.Enabled = true;
                chkeNhapTatCa_CheckedChanged(null, null);
            }
            else
            {
                grcThietLapLai.Enabled = false;
                gvDonVi.OptionsBehavior.Editable = true;
                gcDonVi_Click(sender, e);
            }
            loadData();
        }

        bool Run_deTungay_EditValueChanged = true;
        private void deTungay_EditValueChanged(object sender, EventArgs e)
        {
            if (Run_deTungay_EditValueChanged)
            {
                //Kiểm tra deTuNgay đã chọn có hợp lệ hay không
                DateTime d1 = new DateTime(deTungay.DateTime.Year, deTungay.DateTime.Month, 1);
                if (d1.Date > DateTime.Now.Date)
                {
                    XtraMessageBox.Show("Không được chọn TỪ NGÀY vượt quá ngày hiện tại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    d1 = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
                }

                Run_deTungay_EditValueChanged = false;
                deTungay.DateTime = d1; //Gán lại ngày cho deTuNgay

                //Tự đồng đặt ngày cho deDenNgay
                if (rb3Thang.Checked) deDenngay.DateTime = clsCommon.generateDenNgay(3, d1);
                else if (rb6Thang.Checked) deDenngay.DateTime = clsCommon.generateDenNgay(6, d1);
                else if (rb12Thang.Checked) deDenngay.DateTime = clsCommon.generateDenNgay(12, d1);

                Run_deTungay_EditValueChanged = true;
            }
            else
            {
                Run_deTungay_EditValueChanged = true;
            }
        }

        private void rbLoaiKyHan_Click(object sender, EventArgs e)
        {
            //Cập nhật LoaiKyHan cho bảng ThietLapLaiXuat
            SqlConnection conn = new SqlConnection(BienTc.connString);
            conn.Open();
            string sql = "";
            if (capDL==1) sql="UPDATE vThietLapLaiXuat1 SET LoaiKyHan=@LoaiKyHan " +
                 "WHERE (day(Tu_Ngay)= " + deTungay.DateTime.Day +
                 " and month(Tu_Ngay)= " + deTungay.DateTime.Month + " and year(Tu_Ngay)= " + deTungay.DateTime.Year +
                 ") and Ma_DT= @macb";
            else sql = "UPDATE vThietLapLaiXuat2 SET LoaiKyHan=@LoaiKyHan " +
                "WHERE (day(Tu_Ngay)= " + deTungay.DateTime.Day +
                " and month(Tu_Ngay)= " + deTungay.DateTime.Month + " and year(Tu_Ngay)= " + deTungay.DateTime.Year +
                ") and Ma_DT= @madl";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Clear();

            int loaikyhan = 0;
            if (rb3Thang.Checked) loaikyhan = 3;
            else if (rb6Thang.Checked) loaikyhan = 6;
            else if (rb12Thang.Checked) loaikyhan = 12;
            cmd.Parameters.AddWithValue("@LoaiKyHan", loaikyhan);

            if (capDL == 1) cmd.Parameters.AddWithValue("@macb", gvDonVi.GetRowCellValue(gvDonVi.FocusedRowHandle, gcolMaCB));
            else cmd.Parameters.AddWithValue("@madl", gvDonVi.GetRowCellValue(gvDonVi.FocusedRowHandle, gcolMaCB));
            int result = cmd.ExecuteNonQuery();

            deTungay_EditValueChanged(sender, e);
        }

        private void deDenngay_EditValueChanged(object sender, EventArgs e)
        {
            loadData();
        }

        private void txtlai_EditValueChanged(object sender, EventArgs e)
        {
            if (rgMode.SelectedIndex==0) riteLaiXuat.NullText = txtlai.Text;
            else 
            {
                if (gvDonVi.RowCount > 0)
                    for (int i = 0; i < gvDonVi.RowCount; i++)
                        gvDonVi.SetRowCellValue(i, gcolLaiXuat, txtlai.Text);
            }
        }

        private void chkeNhapTatCa_CheckedChanged(object sender, EventArgs e)
        {
            txtlai.Enabled = chkeNhapTatCa.Checked; 
            gvDonVi.OptionsBehavior.Editable = !chkeNhapTatCa.Checked;
            btluu.Enabled = chkeNhapTatCa.Checked;
        }

        private void btluu_Click(object sender, EventArgs e)
        {
            clsThietLapLai tll = new clsThietLapLai();
            tll.OnAction += new clsThietLapLai.OnActionHandler(tll_OnAction);
            tll.OnError += new clsThietLapLai.OnErrorHandler(tll_OnError);

            int LoaiKyHan = 0;
            if (rb3Thang.Checked) LoaiKyHan = 3;
            else if (rb6Thang.Checked) LoaiKyHan = 6;
            else if (rb12Thang.Checked) LoaiKyHan = 12;

            decimal laixuat; int id;

            for (int i = 0; i < gvDonVi.RowCount; i++)
            {
                if (capDL == 1) id = (int)gvDonVi.GetRowCellValue(i, "DMCanBoID");
                else id = (int)gvDonVi.GetRowCellValue(i, "HopDongID");

                if (gvDonVi.GetRowCellValue(i, gcolLaiXuat).ToString().Trim() != "") laixuat = (decimal)gvDonVi.GetRowCellValue(i, gcolLaiXuat);
                else laixuat = Convert.ToDecimal(txtlai.Text);

                int result = tll.Update(capDL, id, deTungay.DateTime.Date, LoaiKyHan, laixuat);
                if (result == 0)    //Nếu UPDATE ảnh hưởng đến 0 record thì có nghĩa là record đó chưa có, khi này ta thực hiện INSERT
                {
                    laixuat = Convert.ToDecimal(txtlai.Text);
                    tll.Insert(capDL, id, deTungay.DateTime.Date, LoaiKyHan, laixuat);
                }
            }

            XtraMessageBox.Show("Đã lưu xong.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            chkeNhapTatCa.Checked = false;
            loadData();
        }
        #endregion


        #region Subs and Functions ============================================================================
        private void loadData() //Thủ tục này để lấy nguồn cho gvDonVi
        {
            clsThietLapLai tll = new clsThietLapLai();
            tll.OnAction += new clsThietLapLai.OnActionHandler(tll_OnAction);
            tll.OnError += new clsThietLapLai.OnErrorHandler(tll_OnError);

            //Cap 1: LX.DMCanBoID, CB.Ma_DT AS MaCB, CB.Ten_DT AS TenCB, DV.Ten_DT AS TenDV, CB.Tien_Goc AS TienGocBD, MAX(Den_ngay) AS NgayTLKyTiep
            //Cap 2: LX.HopDongID, HD.Ma_DaiLy AS MaDL, HD.Ten_DaiLy AS TenDL, DV.Ten_DT AS TenDV, HD.So_Tien AS TienGocBD, MAX(Den_ngay) AS NgayTLKyTiep
            gcDonVi.DataSource = tll.loadData(capDL, rgMode.SelectedIndex, deTungay.DateTime);
        }

        private void tll_OnAction(SqlException e)
        {
            tll_OnError(e);
        }

        private void tll_OnError(Exception e)
        {
            XtraMessageBox.Show("Một lỗi chưa được xử lý đã xảy ra. Chi tiết lỗi: \n" + e.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.Close();
        }
        #endregion Subs and Functions =========================================================================
    }
}